/*
 * Titulo: VentanaResultadoController
 * Autor: Diego Serafín Martínez García
 * Descripcion:Clase que interactua con el modelo, y la vista.
 * 
 * Universidad Autonoma de Yucatan
 * 
 */
package controlador;

import DAO.DAOEscuela;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import modelo.Escuela;
import util.Consultas;
import util.OrdenamientosExternos;
import util.OrdenamientosInternos;

/**
 *
 * @author Diego Serafín Martínez García
 */
public class VentanaResultadosController {

    private ArrayList<Escuela> escuelasNacional = new ArrayList<Escuela>();
    private ArrayList<Escuela> escuelasYucatan = new  ArrayList<Escuela>();
    private DAOEscuela dao = new DAOEscuela();
    public static ArrayList<Escuela>  Nacional = new ArrayList<Escuela>();
    public static ArrayList<Escuela>  Yucatan = new ArrayList<Escuela>();
    
    //cargar información
    public void loadData() {
        try {
            Nacional = dao.getEscuelasNac();
            Yucatan = dao.getEscuelasYuc();
            escuelasYucatan = dao.getEscuelasYuc();
            escuelasNacional = dao.getEscuelasNac();
        } catch (IOException e) {
        }
    }//fin de cargar informacion

    
    public void reestablecer(){
       escuelasYucatan=Yucatan;
       escuelasNacional=Nacional;
    }
    
    
    //LLenado de tabla Yucatan
    public Vector getDataforTableYucatan() {
        Vector<Vector<String>> data = new Vector<Vector<String>>();
        for (int i = 0; i < escuelasYucatan.size(); i++) {
            Escuela esc;
            Vector<String> row = new Vector<String>();
            esc = escuelasYucatan.get(i);
            row.add(esc.getEntidad());
            row.add(esc.getClaveEscuela());
            row.add(esc.getNombreEscuela());
            row.add(Double.toString(esc.getPromedioGeneral()));
            data.add(row);
        }
        return data;
    }//fin detabla Yucatan
    
    
        public Vector getDataforTableVacia() {
        Vector<Vector<String>> data = new Vector<Vector<String>>();
        for (int i = 0; i < 10; i++) {
            Vector<String> row = new Vector<String>();
            row.add("");
            row.add("");
            row.add("");
            row.add("");
            data.add(row);
        }
        return data;
    }//fin detabla Yucatan
    
    
    //Titulos de Yucatan

    public Vector getTitlesYucatan() {
        Vector<String> titles = new Vector<String>();
        titles.add("Entidad   ");
        titles.add("Clave de la Escuela   ");
        titles.add("Nombre de la Escuela");
        titles.add("Promedio Global");
        return titles;
    }//fin de titulos Yucatan

    //LLenado de tabla Nacional
    public Vector getDataforTableNacional() {
        Vector<Vector<String>> data = new Vector<Vector<String>>();
        for (int i = 0; i < escuelasNacional.size(); i++) {
            Escuela esc;
            Vector<String> row = new Vector<String>();
            esc = escuelasNacional.get(i);
            row.add(esc.getEntidad());
            row.add(esc.getClaveEscuela());
            row.add(esc.getNombreEscuela());
            row.add(Double.toString(esc.getPromedioGeneral()));
            data.add(row);
        }
        return data;
    }//fin tabla Nacional
    
    //Titulos Nacional

    public Vector getTitlesNacional() {
        Vector<String> titles = new Vector<String>();
        titles.add("Entidad   ");
        titles.add("Clave de la Escuela   ");
        titles.add("Nombre de la Escuela");
        titles.add("Promedio Global");
        return titles;
    }//fin de titulos Nacional

    
    //Ordena el arreglo entrante
    public void OrdenaInternos(int ordenamiento) {
        OrdenamientosInternos ordename = new OrdenamientosInternos();
        switch (ordenamiento) {
            case 0:
                ordename.burbuja(escuelasYucatan);
                break;//Burbuja
            case 1:
                ordename.insercion(escuelasYucatan);
                break;//Insercion
            case 2:
                ordename.shellSort(escuelasYucatan);
                break;//Shellsort
            case 3:
                escuelasYucatan = ordename.mergeSort(escuelasYucatan);
                break;//Mergesort
            case 4:
                escuelasYucatan = ordename.quicksort(escuelasYucatan);
                break;//Quicksort


        }



    }//fin de Ordena Internos   
    
    public void consultaYucatan(int ordenamiento, int tipoConsulta, double filtro){
        Consultas con = new Consultas();
        OrdenaInternos(ordenamiento);
        escuelasYucatan = con.consulta( escuelasYucatan, tipoConsulta, filtro);
        
    }
    
    
    public void OrdenaNacional(){
       try {
            //System.out.println(this.escuelasNacional.get(0).getNombreEscuela());
            OrdenamientosExternos.preparaArchivoNacional( this.escuelasNacional );
            
            String F = "F.txt",F1="F1.txt",F2="F2.txt",F3="F3.txt";
       
         escuelasNacional = OrdenamientosExternos.mezclaequilibrada(F,F1,F2,F3);
         
         //escuelasNacional.remove(89531);
         //OrdenamientosExternos
         //OrdenamientosExternos.reconstruye(escuelasNacional);
         //escuelasNacional = OrdenamientosExternos.getEscuelas();
            
       } catch (FileNotFoundException ex) {
            Logger.getLogger(VentanaResultadosController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(VentanaResultadosController.class.getName()).log(Level.SEVERE, null, ex);
        }
       
    }
    
    
    public void consultaNaciona(int tipoConsulta,double filtro){
        Consultas con = new Consultas();
        //OrdenaNacional(); /////////error
        escuelasNacional = con.consulta(escuelasNacional, tipoConsulta, filtro);
    }
} //fin clase VentanaResultadosController
